<?php


include_once(BASEPATH . '/conf/conf.php');
/**
 * File:        pgUtils.php
 * 数据库操作工具类
 *
 * @author      Xia Lijun   /   Liu Rui
 * @date        2019年7月29日14:33:48
 * @version     V1.0
 */

class PgUtils
{

    // 数据库构造方法
    // 初始化数据库连接参数
    // 并返回连接的游标
    private static function initConfig()
    {
        $db_conn_str = "host=" . PGDB_CONFIG['host'] . ' port=' . PGDB_CONFIG['port'];
        $db_conn_str .= " dbname=" . PGDB_CONFIG['db_name'];
        $db_conn_str .= " user=" . PGDB_CONFIG['user'] . ' password=' . PGDB_CONFIG['password'];
        return pg_connect($db_conn_str);
    }


    /**
     * 可以使用所有的 sql 语句 来进行 增、删、改、查
     * 
     * @param string $sql 接收传送过来的完整的SQL语句
     * @return array 返回一个数据库的结果
     */
    public static function query(string $sql)
    {
        $res = pg_query(PgUtils::initConfig(), $sql);
        return $res;
    }

    /**
     * 使用数据库查询功能
     * 
     * @param string $sql 接收传送过来的完整的SQL语句
     * @return array 返回获取到的二维数组
     */
    public static function query_select(string $sql): ?array
    {
        $option = explode(' ', $sql);
        if ($option[0] === 'select') {
            $res = pg_query(PgUtils::initConfig(), $sql);
            $data_res = array();
            while ($row = pg_fetch_assoc($res)) {
                $data_res[] = $row;
            }
            return $data_res;
        } else {
            throw new ParameterException("数据库查询异常 Not Find : select", 600);
        }
        return null;
    }


    /**
     * 使用数据库查询功能
     * 
     * @param string $sql 接收传送过来的完整的SQL语句
     * @return array 返回获取到的二维数组
     */
    public static function query_insert(string $sql)
    {
        $option = explode(' ', $sql);
        if ($option[0] === 'insert' && $option[1] === 'into') {
            try {
                $res = pg_query(PgUtils::initConfig(), $sql);
                return $res;
            } catch (\Throwable $th) {
                echo $th;
            }
        } else {
            throw new ParameterException("数据库查询异常 Not Find : insert into", 601);
        }
        return null;
    }
}
